import axios from 'axios'
import {
	BASE_URL
} from './config'
import router from '../router'

axios.defaults.timeout = 30000; // 超时时间设置
axios.defaults.withCredentials = true // true允许跨域
axios.defaults.baseURL = BASE_URL
// Content-Type 请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'



//设置请求拦截
axios.interceptors.request.use(function (config) {
	var token = window.localStorage.getItem("token");
	// alert(token);
	if(token)
	{
		config.headers.token = token;
	}
	
	return config;
}
);

// 响应拦截器
axios.interceptors.response.use(
	response => {
		
		// 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
		// 否则的话抛出错误
		if (response.status === 200) {
			
			if ( typeof response.data === 'string' && response.data.indexOf('code=2006') != -1) {
				router.replace({
					name: 'Login',
					query: {
						redirect: router.currentRoute.fullPath
					}
				})
			} else {

				return Promise.resolve(response)
			}

		} else {
			return Promise.reject(response)
		}
	},
	// 服务器状态码不是2开头的的情况
	error => {
		if (error.response) {
			switch (error.response.status) {
				// 401: 未登录
				case 2005:
					router.replace({
						path: '/',
						query: {
							redirect: router.currentRoute.fullPath
						}
					})
					break
				case 403:
					// console.log('管理员权限已修改请重新登录')
					// 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
					setTimeout(() => {
						router.replace({
							path: '/login',
							query: {
								redirect: router.currentRoute.fullPath
							}
						})
					}, 1000)
					break

				// 404请求不存在
				case 404:
					// console.log('请求页面飞到火星去了')
					break
			}
			return Promise.reject(error.response)
		}
	}
)

/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function get(url, params = {}, responseType = 'json') {
	return new Promise((resolve, reject) => {
		console.log(responseType)
		axios.get(url, {
			params: params,
			responseType
		})
			.then(response => {
				console.log('response', response);
				resolve(response)
			})
			.catch(err => {
				reject(err)
			})
	})
}

/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */
export function post(url, data = {}) {
	return new Promise((resolve, reject) => {
		axios.post(url, data)
			.then(response => {
				resolve(response)
			}, err => {
				reject(err)
			})
	})
}
